package br.com.recipe.service;

import java.util.List;
import java.util.Map;

import br.com.recipe.dao.UsuarioDAO;
import br.com.recipe.entity.Usuario;
import br.com.recipe.exception.RecipeException;

public class UsuarioService {
	private static UsuarioService instance;
	private String error;
	
	private UsuarioService() {}
	
	public String getError() {
		return error;
	}

	public static UsuarioService getInstance() {
		if (instance == null) {
			instance = new UsuarioService();
		}
		return instance;
	}
	
	public boolean checkInvariant(Usuario usuario) {
		boolean resultado = false;
		
		if (usuario == null) {
			resultado = false;
			error = "Usuario nao pode ser nulo";
		} else if (usuario.getLogin().isEmpty()) {
			resultado = false;
			error = "Login nao pode estar vazio";
		} else if (usuario.getLogin().length() < 5) {
			resultado = false;
			error = "Login precisa ter no minimo 5 caracteres";					
		} else {
			resultado = true;
		}
				
		return resultado;		
	}
	
	public void delete(Usuario usuario) throws RecipeException {
		if (checkInvariant(usuario)) {
			UsuarioDAO.getInstance().delete(usuario);
		} else {
			throw new RecipeException(getError());
		}
	}
	
	public List<Usuario> execQuery(String hql) throws RecipeException {
		return UsuarioDAO.getInstance().execQuery(hql);
	}
	
	public List<Usuario> execQuery(String hql, Map<?, ?> params) throws RecipeException {
		return UsuarioDAO.getInstance().execQuery(hql, params);
	}
	
	public Usuario getById(Integer id) throws RecipeException {
		return UsuarioDAO.getInstance().getById(Usuario.class, id);
	}
	
	public void save(Usuario usuario) throws RecipeException {
		UsuarioDAO.getInstance().save(usuario);
	}  
	
}
